﻿Imports System.Data.SqlClient
Imports System.IO
Imports lablinkhelper

Public Module globalModule

#Region "Variable"

    Public Enum ImageIndex
        RootNode = 0
        RootUser = 1
        NodeUser = 2
        RootFuntion = 3
        NodeFuntion = 4
        RootRole = 5
        NodeRole = 6
        LeafRole = 7
        RootParam = 8
        NodeParam = 9
        Lock = 13
        LockFunction = 17
    End Enum

    Public Enum Status
        Insert = 1
        Update = 0
        Delete = -1
        InsertSubSystemNode = 2
        InsertMenuLevel1Node = 3
    End Enum

    Public gv_intSubSysID As Integer = 0
    'Biến dùng để lưu trữ ID của phân hệ phục vụ trong việc hiển thị ToolBar của phân hệ
    Public gv_intCurrRoleID As Integer = 0
    'Biến dùng để lưu trữ ID của phân hệ phục vụ trong việc hiển thị ToolBar của phân hệ
    Public gv_sSubSysName As String
    'Biến dùng để lưu trữ tên của phân hệ phục vụ trong việc hiển thị ToolBar của phân hệ
    Public gv_intRolePerformed As Integer = 0
    'Biến dùng lưu trữ Node đang được chọn hiện thời để tránh trường hợp
    ' mỗi lần click vào Node trên TreeView là phải load lại Panel bên phải
    Public gv_bIncreateOrDecrete As Boolean = True
    Public gv_oSqlCnn As SqlConnection
    ' Biến lưu trữ chuỗi kết nối đến CSDL
    Public gv_sAnnouncement As String = "Thông báo"
    ' Biến làm Title cho các MessageBox
    Public gv_dsParam As New DataSet
    ' Biến lưu trữ danh sách các tham số của đơn vị trong CSDL
    Public gv_dsFunction As New DataSet
    ' Biến lưu trữ toàn bộ Function của đơn vị trong CSDL
    Public gv_dsTbrBtn As New DataSet
    ' Biến lưu trữ toàn bộ Function của đơn vị trong CSDL
    Public gv_dsRole As New DataSet
    ' Biến lưu trữ toàn bộ quyền của chi nhánh trong CSDL
    Public gv_dsUser As New DataSet
    ' Biến lưu trữ toàn bộ Users của chi nhánh trong CSDL
    Public gv_dsRolesForUsers As New DataSet
    ' Biến lưu trữ quyền của một User
    Public gv_bCallContextMenuFromTreeView As Boolean = True
    Public gv_bCanUpdateByDblClickOnGrid As Boolean = False
    ' Biến xác định có được phép gọi chức năng cập nhật khi DoubleClick on DataGrid hay không?
    Public gv_sBranchID As String = "EVNIT001"
    'Mã chi nhánh
    Public gv_sBranchName As String = "  Trung tâm CNTT-EVN  "
    ' Tên chi nhánh
    Public gv_sComName As String = Environment.MachineName
    ' Chứa tên hoặc ID của máy chủ CSDL
    Public gv_sDBName As String = "Assembly"
    ' Tên CSDL
    Public gv_sUID As String = "CUONGDV"
    ' Chứa tên đăng nhập QTHT
    Public gv_sPWD As String = "CUONGDV"
    ' Chứa mật khẩu công khai của QTHT
    Public gv_bLoginSuccess As Boolean = False
    'Biến xác định xem có đăng nhập được vào CSDL với tài khoản nhập vào không?
    Public gv_sSymmetricAlgorithmName As String = "Rijndael"
    'Tên thuật toán mã hóa đối xứng
    Public gv_ConnectSuccess As Boolean = False
    'Biến xác định xem có kết nối được vào CSDL để làm việc không?
    Public gv_sSecretUID As String
    'User bí mật
    Public gv_sSecretPWD As String
    'Mật khẩu bí mật
    Public gv_arrKeyhasSearched As New ArrayList
    'Lưu trữ danh sách các từ khóa tìm kiếm trên TreeView
    Public gv_arrDLLhasSearched As New ArrayList
    'Lưu trữ danh sách các DLL tìm kiếm trên Grid
    Public gv_arrFunctionhasSearched As New ArrayList
    'Lưu trữ danh sách các Function tìm kiếm trên Grid

    'Tháng Năm hệ thống
    Public gv_intCurrMonth As Integer
    Public gv_intCurrYear As Integer
    Public gv_oNode As TreeNode
    Public gv_bChangeToolBar As Boolean = True
    'Biến xác định xem ToolBar có gì thay đổi không để build lại
    Private gv_mtx As System.Threading.Mutex
    'Thread cho phép chỉ 1 ứng dụng chạy tại một thời điểm
    Public gv_oMainForm As New frmManSysApp
    Public gv_objTrans As SqlTransaction
    Public gv_oTTT As New ToolTip
    '-------------------------------------------------------------------------------------
    'Các biến chung phần tùy chọn
    Public gv_sDefaultIconPathForSubSystem As String
    'Đường dẫn tới Icon mặc định cho phân hệ
    Public gv_sDefaultImgPathForSubSystem As String
    'Đường dẫn tới ảnh mặc định cho phân hệ
    Public gv_sDefaultIconPathForRole As String
    'Đường dẫn tới Icon mặc định cho Role
    Public gv_intRoleLevel As Integer
    'Cấp cao nhất của Role
    Public gv_bEnableDragAndDrop As Boolean
    Public gv_bAnnouceBeforeDropRole As Boolean
    '-------------------------------------------------------------------------------------
    Public gv_bCannotDeletePWDOfUID As Boolean
    'Cấm xóa mật khẩu người dùng
    Public gv_bCannotDeletePWDOfAllUIDs As Boolean
    'Cấm xóa mật khẩu tất cả các người dùng
    Public gv_bCannotDeleteUID As Boolean
    'Cấm Xóa người dùng
    Public gv_bMixedRolesOfUsers As Boolean
    'Trộn quyền người dùng
    Public gv_bCanDblClickToGetRolesForUser As Boolean
    'Dbl Click trên để lấy Role cho User
    '-------------------------------------------------------------------------------------
    Public gv_bAnnounceAfterInsertingSuccessfully As Boolean
    Public gv_bAnnounceAfterUpdatingSuccessfully As Boolean
    Public gv_bAnnounceAfterDeletingSuccessfully As Boolean
    Public gv_bAskingBeforeDeleting As Boolean
    Public gv_bCloseFormAfterDML As Boolean
    '-------------------------------------------------------------------------------------
    Public gv_LockedFunctionColor As Color
    Public gv_bAnnouceAfterActivatingFunction As Boolean
    Public gv_bAnnouceAfterLockingFunction As Boolean
    Public gv_bCannotDeleteFunction As Boolean
    '-------------------------------------------------------------------------------------
    Public gv_LockedParamColor As Color
    Public gv_bAnnouceAfterActivatingParam As Boolean
    Public gv_bAnnouceAfterLockingParam As Boolean

    '------------------------------------------------------------------------------------
    Public gv_DSRoleForOutIn As New DataSet
    Public gv_sXMLFilePath As String = String.Empty
    Public mv_sConnString As String
    Public gv_bRoleHasChanged As Boolean = False
    ' Biến xác định có cần Load lại cây phân quyền cho người dùng mỗi lần chọn một User hay không

#End Region

    '------------------------------------------------------------------------------------------------------------
    'Mục đích        : Hàm Main được gọi mỗi khi khởi tạo ứng dụng. Áp dụng cơ chế của lớp Mutex nhằm chỉ cho
    '                 phép chạy một khởi tạo của ứng dụng tại một thời điểm trên một máy
    'Đầu vào          :
    'Đầu ra            :
    'Người tạo       :CuongDV
    'Ngày tạo         :09/03/2005
    'Nhật kí sửa đổi:
    '------------------------------------------------------------------------------------------------------------
    Sub Main()
        Try
            Dim bCreated As Boolean
            gv_mtx = New System.Threading.Mutex(False, "SYS_DVC", bCreated)
            If bCreated = True Then
                gv_oMainForm.ShowDialog()
            Else
                MessageBox.Show("Một khởi tạo của chương trình đang chạy!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End
            End If
        Catch ex As Exception
        End Try
    End Sub

    Public Function InitializeConnection() As Boolean
        Try
            Dim fvSUid As String
            Dim fvSPwd As String
            lablinkhelper.Utilities.GetConfigFromXml(gv_sComName, gv_sDBName, fvSUid, fvSPwd, gv_sBranchID)
            gv_oSqlCnn = lablinkhelper.Utilities.GetDBConnection()
            If gv_oSqlCnn.State <> ConnectionState.Open Then gv_oSqlCnn.Open()
            gv_ConnectSuccess = True
            GetBranchInfor(gv_sBranchID)
            Return True

        Catch ex As Exception
            MessageBox.Show("Không kết nối được vào CSDL. Liên hệ với quản trị hệ thống ", gv_sAnnouncement, MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        End Try
    End Function

    Public Function IIF_VN(ByVal pv_oObject As Object) As String
        If IsDBNull(pv_oObject) Or pv_oObject Is Nothing Then
            Return "Chưa gán"
        Else
            Return pv_oObject.ToString
        End If
    End Function

    Public Function ValidData(ByVal pv_sValue As String) As String
        If Not pv_sValue.Trim.Equals(String.Empty) Then
            Return pv_sValue.Trim.Replace("'", "''")
        Else
            Return " "
        End If
    End Function

    Public Sub GetRegValueForOptions()
        Dim clsReg As New clsRegistry
        gv_sDefaultIconPathForSubSystem = s_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "DefaultIconPathForSubSystem"))
        gv_sDefaultImgPathForSubSystem = s_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "DefaultImgPathForSubSystem"))
        gv_sDefaultIconPathForRole = s_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "DefaultIconPathForSubRole"))
        gv_intRoleLevel = Int_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "RoleLevel"), 5)
        gv_bEnableDragAndDrop = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "EnableDragAndDrop"))
        gv_bAnnouceBeforeDropRole = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AnnouceBeforeDropRole"), False)
        '-------------------------------------------------------------------------------------
        gv_bCannotDeletePWDOfUID = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "CannotDeletePWDOfUID"))
        gv_bCannotDeletePWDOfAllUIDs = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "CannotDeletePWDOfAllUIDs"))
        gv_bCannotDeleteUID = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "CannotDeleteUID"))
        gv_bMixedRolesOfUsers = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "MixedRolesOfUsers"))
        gv_bCanDblClickToGetRolesForUser = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "CanDblClickToGetRolesForUser"))
        '-------------------------------------------------------------------------------------
        gv_bAnnounceAfterInsertingSuccessfully = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AnnounceAfterInsertingSuccessfully"), False)
        gv_bAnnounceAfterUpdatingSuccessfully = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AnnounceAfterUpdatingSuccessfully"), False)
        gv_bAnnounceAfterDeletingSuccessfully = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AnnounceAfterDeletingSuccessfully"), False)
        gv_bAskingBeforeDeleting = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AskingBeforeDeleting"))
        gv_bCloseFormAfterDML = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "CloseFormAfterDML"), False)
        '-------------------------------------------------------------------------------------
        gv_LockedFunctionColor = Color.FromArgb(intGetArgb(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "LockedFunctionColor")))
        gv_bAnnouceAfterActivatingFunction = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AnnouceAfterActivatingFunction"), False)
        gv_bAnnouceAfterLockingFunction = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AnnouceAfterLockingFunction"), False)
        gv_bCannotDeleteFunction = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "CannotDeleteFunction"), True)
        '-------------------------------------------------------------------------------------
        gv_LockedParamColor = Color.FromArgb(intGetArgb(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "LockedParamColor")))
        gv_bAnnouceAfterActivatingParam = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AnnouceAfterActivatingParam"), False)
        gv_bAnnouceAfterLockingParam = b_IsNothingOrDBNull(clsReg.GetReg(2, "DVC_COMPANY", "SYSMAN_DVC", "AnnouceAfterLockingParam"), False)
    End Sub

    Private Function intGetArgb(ByVal pv_obj As Object)
        If IsDBNull(pv_obj) Or pv_obj Is Nothing Then
            Return Color.Red.ToArgb
        Else
            Return CInt(pv_obj)
        End If
    End Function

    Private Function b_IsNothingOrDBNull(ByVal pv_oObject As Object, Optional ByVal pv_bValue As Boolean = True) As String
        If IsDBNull(pv_oObject) Or pv_oObject Is Nothing Then
            Return pv_bValue
        Else
            Return CBool(pv_oObject)
        End If
    End Function

    Public Function Int_IsNothingOrDBNull(ByVal pv_oObject As Object, ByVal pv_bValue As Integer) As String
        If IsDBNull(pv_oObject) Or pv_oObject Is Nothing Then
            Return pv_bValue
        Else
            Return CInt(pv_oObject)
        End If
    End Function

    Public Function s_IsNothingOrDBNull(ByVal pv_oObject As Object) As String
        If IsDBNull(pv_oObject) Or pv_oObject Is Nothing Then
            Return ""
        Else
            Return pv_oObject.ToString
        End If
    End Function

    Private Sub GetBranchInfor(ByVal pv_sBranchID As String)
        Dim sv_Ds As New DataSet
        Dim sv_DA As SqlDataAdapter
        Try
            sv_DA = New SqlDataAdapter("SELECT * FROM TBL_ManagementUnit WHERE PK_sBranchID=N'" & pv_sBranchID & "'", gv_oSqlCnn)
            sv_DA.Fill(sv_Ds, "TBL_ManagementUnit")
            If sv_Ds.Tables(0).Rows.Count > 0 Then
                gv_sBranchName = sv_Ds.Tables(0).Rows(0)("sName")
            Else
                Return
            End If
        Catch ex As Exception

        End Try
    End Sub

    Public Function dsGetAllTbrBtnForOutputConfig(ByVal pv_sBranchID As String) As DataSet
        Dim sv_Ds As New DataSet
        Dim sv_DA As SqlDataAdapter
        Try
            sv_DA = New SqlDataAdapter("SELECT * FROM TBL_ToolBarButton WHERE FP_sBranchID=N'" & pv_sBranchID & "'", gv_oSqlCnn)
            sv_DA.Fill(sv_Ds, "TBL_ToolBarButton")
            If sv_Ds.Tables.Count > 0 Then
                Return sv_Ds
            Else
                Return Nothing
            End If
        Catch ex As Exception
            Return Nothing
        End Try
    End Function

    Public Function bIsValidPath(ByVal pv_sPath As String) As Boolean
        If pv_sPath.Trim.Equals(String.Empty) Then
            Return False
        Else
            If IO.File.Exists(pv_sPath) Then
                Return True
            Else
                Return False
            End If
        End If
    End Function
End Module
